package cn.st4rlight.util.chinese;

import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import com.github.promeg.pinyinhelper.Pinyin;
import com.github.promeg.pinyinhelper.Pinyin.Config;
import com.github.promeg.pinyinhelper.PinyinMapDict;
import com.github.promeg.tinypinyin.lexicons.java.cncity.CnCityDict;
import com.google.common.collect.Maps;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

/**
 * <a href='https://github.com/promeG/TinyPinyin'>参考文档</a>
 *
 * @author st4rlight <st4rlight@163.com>
 * Created on 2024-04-14
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class PinyinUtil {

    static {
        Config initConfig = Pinyin.newConfig();
        // 添加中文城市词典
        initConfig.with(CnCityDict.getInstance());

        // 添加自定义词典
        initConfig.with(new PinyinMapDict() {
            @Override
            public Map<String, String[]> mapping() {
                Map<String, String[]> map = Maps.newHashMap();
                // 示例，这里的斜念xia而不是xie
                map.put("石径斜", new String[]{"shi", "jing", "xia"});
                return map;
            }
        });

        Pinyin.init(initConfig);
    }

    /**
     * 汉字转大写拼音
     */
    public static String toUpperPinyin(String str) {
        if (StringUtils.isEmpty(str)) {
            return StringUtils.EMPTY;
        }

        return Pinyin.toPinyin(str, ""); // 默认大写
    }

    /**
     * 汉字转小写拼音
     */
    public static String toLowerPinyin(String str) {
        if (StringUtils.isEmpty(str)) {
            return StringUtils.EMPTY;
        }

        return Pinyin.toPinyin(str, "").toLowerCase();
    }
}
